Firefighters battle 3-alarm fire