Philipsen’s Alpecin-Deceuninck team dominated in the closing stages in Nimes before the 26-year-old broke clear to the line.
Eritrean Girmay was unable to contest the sprint after falling inside the final kilometre and subsequently saw Philipsen reduce his lead in the green jersey competition to 32 points.
Mark Cavendish crossed the line in 17th position in the final sprint stage of his Tour de France farewell before a mountainous conclusion to this years’ race.
Tadej Pogacar retained the leader’s yellow jersey and protected his lead of three minutes nine seconds over two-time defending champion Jonas Vingegaard.
Remco Evenepoel remains in third position, five minutes nine seconds off the overall lead.
A relatively quiet stage 16 always looked destined to end in a bunch sprint, with a sole attack by Thomas Gachignard, of Total Energies, providing the only action at the front of the race until the French 23-year-old was caught with 25km remaining.
With this the final opportunity for the sprinter’s teams to claim victory before the race returns to the Alps, a frenetic finale unfolded.
As Alpecin-Deceuninck raised the pace, Girmay’s misfortune left nobody able to challenge Philipsen as he added to his victories on stages 10 and 13.
Girmay was escorted to the line by his Intermarche-Wanty team-mates and must now aim to recover as Philipsen challenges for the green jersey which appeared to be out of reach before the start of the Tour’s final week.
Tour de France stage 16 results
1. Jasper Philipsen (Bel/Alpecin-Deceuninck) 4hrs 11mins 27secs
2. Phil Bauhaus (Ger/Bahrain Victorious) same time
3. Alexander Kristoff (Nor/Uno-X) “
4. Sam Bennett (Ire/Decathlon-AG2R) “
5. Wout van Aert (Bel/Visma-Lease a Bike) “
6. Pascal Ackermann (Ger/Israel Premier Tech) “
7. Bryan Coquard (Fra/Cofidis) “
8. Soren Waerenskjold (Nor/Uno-X Mobility) “
9. Ryan Gibbons (SA/Lidl-Trek) “
10. Danny van Poppel (Ned/Bora–Hansgrohe) “
General classification after stage 16
1. Tadej Pogacar (Slo/UAE Team Emirates) 66hrs 7mins 51secs
2. Jonas Vingegaard (Den/Visma-Lease a Bike) +3mins 9secs
3. Remco Evenepoel (Bel/Soudal- Quick Step) +5:19
4. Joao Almeida (Por/UAE Team Emirates) +10:54
5. Mikel Landa (Spa/Soudal-Quick Step) +11:21
6. Carlos Rodriguez (Spa/Ineos Grenadiers) +11:27
7. Adam Yates (GB/UAE Team Emirates) +13:38
8. Giulio Ciccone (Ita/Lidl-Trek) +15:48
9. Derek Gee (Can/Israel-Premier Tech) +16:12
10. Santiago Buitrago (Col/Bahrain Victorious) +16:32