After plenty of scares along the way, Arsenal, Chelsea and Manchester City are through to the next stage of the Champions League.
Of the Premier League's four contenders, only Manchester United failed to make it through, suffering a heartbreaking exit against Wolfsburg on Tuesday night.
So how did each and every group finish? Here's what you need to know ahead of Monday's last-16 draw at 11:00 GMT.
Group A - Real & PSG through
Qualified: Real Madrid, Paris St-Germain
Europa League: Shakhtar Donetsk
This week's fixtures: Real Madrid, who had already qualified for the next round, ended the group in style by crushing Malmo 8-0 - Cristiano Ronaldo scoring four.
Paris St-Germain will join them, and they also finished on a winning note as Lucas Moura and Zlatan Ibrahimovic scored in a 2-0 win against Shakhtar Donetsk.
Group B - United crash out
Qualified: Wolfsburg, PSV Eindhoven
Europa League: Manchester United
Eliminated: CSKA Moscow
This week's fixtures: It was a disastrous evening for Manchester United, who took the lead against Wolfsburg before being pegged back and eventually beaten 3-2 by the Germans, who top the group.
United would have qualified if CSKA had beaten PSV Eindhoven - and the Russians took a late lead. But it didn't last long and the Dutch side go through as runners-up, while Louis van Gaal's side drop into the Europa League.
Group C - Smooth sailing for Benfica and Atletico
Qualified: Benfica, Atletico Madrid
Europa League: Galatasaray
This week's fixtures: This group was wrapped up before Tuesday evening and Atletico secured top spot with a 2-1 victory over Benfica.
Group D - City top the group
Qualified: Manchester City, Juventus
Europa League: Sevilla
Eliminated: Borussia Monchengladbach
Manchester City were desperate to top the group because it means they are likely to get a more favourable draw in the next round as they will face one of the group runners-up.
And they did it! A 4-2 victory over Borussia Monchengladbach was enough after Juventus slipped up against Europa League-bound Sevilla.
Group E - Roma join Barca in last 16
Qualified: Barcelona, Roma
Europa League: Bayer Leverkusen
Eliminated: BATE Borisov
This week's fixtures: Barcelona breezed through the group without defeat, leaving Roma and Bayer Leverkusen to fight it out for the spoils of second place.
The Italians sealed qualification, despite conceding 16 goals in six games, with a 0-0 draw against BATE Borisov.
Group F - Arsenal through after a stuttering start
Qualified: Bayern Munich, Arsenal
Europa League: Olympiakos
Eliminated: Dinamo Zagreb
This week's fixtures: Arsenal made hard work of qualification - losing their first two games, against Dinamo Zagreb and Olympiakos - but came good when it mattered with an accomplished 3-0 away victory against the Greek side on the final match day.
Group G - Chelsea top the group
Qualified: Chelsea, Dynamo Kiev
Europa League: Porto
Eliminated: Maccabi Tel Aviv
This week's fixtures: Despite finishing with 13 points, Chelsea took until the final group game to secure qualification. They did, however, top the group which means they are likely to get a more favourable draw in the next round.
Group H - Neville can't save Valencia
Already qualified: Zenit St Petersburg, Gent
Europa League: Valencia
This week's fixtures: All eyes were on Gary Neville, who took charge of Valencia with the La Liga side needing victory against Lyon in their final group game to stand any chance of pipping Gent to second place in the group.
As it was, Gent beat Zenit St Petersburg 2-1 meaning Valencia's defeat at home to Lyon mattered little.
What it all means
Arsenal's possible last-16 opponents: Real Madrid, Atletico Madrid, Barcelona, Wolfsburg or Zenit.
Chelsea's possible last-16 opponents: Paris St-Germain, PSV, Juventus, Roma, Benfica or Gent.
Manchester City's possible last-16 opponents: Paris St-Germain, PSV, Benfica, Roma, Dynamo Kiev, Gent.