The Gunners had been keen to sign the Porto striker after he netted 24 times in the Portuguese top flight last season.
But Milan jumped the queue to the Portugal international as they matched his release clause before they agreed a four-year deal.
Silva underwent a medical at the Serie A giants on Monday morning before he signed on the dotted line and posed for pictures in the afternoon.
The front man had been at Porto since he was a 16-year-old before making his first team debut two years ago.
The 21-year-old is the San Siro based side’s fourth summer signing after they captured Mateo Musacchio, Ricardo Rodriguez and Franck Kessie.
It takes their spending to €100m before the window official opens at the end of the month.
Milan have money to splash as they attempt to topple Juventus’ dominance at the top – having been taken over by a moneybag Chinese investor.