Hamilton had slipped to third after a Safety Car restart caused when Alfa Romeo’s Kimi Raikkonen collided with Antonio Giovinazzi’s left rear wheel on lap seven.
But the 36-year-old Hamilton overtook Verstappen on lap 11, eventually racing past Bottas, who had started in pole, for the lead nine laps later.
Once he had pulled ahead at the Algarve International Circuit, Hamilton never looked back, winning by a comfortable 29.148 second margin.
The victory for Hamilton is his second of the season and puts him eight points ahead of Red Bull’s Verstappen in the title standings.
“That was such a tough race physically and mentally,” Hamilton told reporters after the race. “Today wasn’t all perfect so we’ll look at those areas and turn over the stones.”
The seven-time world champion will look to extend his lead in the title standings at the Spanish Grand Prix on May 9.