Firefighters battle 3-alarm blaze in Beverly