The Portugal striker spent last season on loan with the Bundesliga club, scoring 16 goals in all competitions.
The 24-year-old has now signed a three-year deal with Frankfurt, much to the delight of sporting director Fredi Bobic.
"Over the last few months we've seen what Andre's capable of," he said.
New chapter, the same ambitions! 2️⃣0️⃣2️⃣3️⃣ pic.twitter.com/tfmrBT69AM— André Silva (@andrevsilva19) September 10, 2020
"It was no accident that he was the second-best striker in the Bundesliga after the restart. He's a young and flexible attacker and, at 24, he's still got potential to improve.
"We're confident we can take him to another level here in Frankfurt and we're delighted to have tied a superb striker to the club until summer 2023."
Silva joined Milan from Porto for an initial €38million in June 2017, but he only made eight starts in Serie A for the Rossoneri.
He spent 2018-2019 on loan at Sevilla, scoring nine times in 27 LaLiga appearances.