Three preseason games in, and the winners of the Denver Broncos’ position battles are beginning to come into focus. With every passing week, the roster bubble and how it will shake out becomes more and more clear.

There are very few true position battles without a clear leader-in-the-clubhouse for the Broncos, and of the few that didn’t have a clear leader, many put one in place Monday night.

With that being said, here’s a look at each remaining position battle and who won it Monday against San Francisco.

2nd-3rd string Quarterback: Kevin Hogan (9) vs. Drew Lock  (3)

Moving up: For the second straight week, Drew Lock showed considerable improvement in his performance.

From the first drive, Lock looked more comfortable, connecting on 4-of-5 attempts for 24 yards, leading to a field goal. He also showed off his escapability as he scampered for a first down.

He also led the offense on a smooth two-minute drill heading into halftime to extend the Broncos’ lead to six. Of course, it’s a preseason without real stakes, but the moment didn’t look too big for Lock as he calmly marched his unit into Brandon McManus’ range.

The negatives for Lock came when he bobbled a snap on his first play of the game and on his first dropback of the second half when he tried to play hero ball rather than just chucking it away or taking the sack. The attempt to flick the ball to Bug Howard at the last second led to Lock injuring his thumb.

Moving down: After Kevin Hogan’s performance against San Francisco, the Broncos should rip the band-aid off and just name Drew Lock the official backup.

If you had no prior knowledge of the existence of Lock or Hogan, and watched Monday night’s preseason affair, you would’ve assumed Hogan was the rookie. He constantly looked lost and flustered, and he held the ball way too long.

The Broncos poor depth along the offensive line certainly didn’t help the hopeful backup, but Hogan’s struggles in the pocket were a huge factor in the number of sacks Denver absorbed in the second half. His performance would’ve been even worse if cornerback Marcel Harris didn’t drop an easy pick-6 late.

4th string Running Back: Devontae Booker (23) vs. Khalfani Muhammad (33) vs. Devontae Jackson (48)

Moving Up: Devontae Booker should be feeling much better about his placement on the roster following the Broncos’ third preseason game.

After Devontae Jackson and Khalfani Muhammad put the pressure on him with stellar showings in the first two games, it looked like Booker may be forced to pack his bags. Though almost from the start of Monday’s game it became clear that his roster spot was more secure than initially thought.

Booker got some work with the ones and was the workhorse back throughout the second quarter when Drew Lock and the rest of the twos came in. In the second quarter alone, Booker had five touches for 21 yards, while Jackson never saw the ball in the first half.

Moving Down: All of the luster appears to have worn off Khalfani Muhammad since his lights-out Hall of Fame Game.

Against Seattle, Muhammad averaged -1.3 yards per carry, gained just six yards on his combined five touches, and was even outplayed David Williams as he was clearly the weakest link in the backfield for Denver.

On Monday Night against San Francisco, Muhammad didn’t play at all with an undisclosed injury. It would now take a miracle for him to be on the roster for the regular season.

6th-7th string Wide Receiver: Fred Brown (19) vs. Kelvin McKnight (16) vs. Trinity Benson (2) vs. River Cracraft (11) vs. Brendan Langley (12) vs. Nick Williams (86) vs. Steven Dunbar (13).

Moving Up: Kelvin McKnight was the lone receiver towards the back of the roster to make an impact against the 49ers.

McKnight was targeted four times and reeled in three of them (both the most of any Broncos wideout) for 21 yards. Through the first two preseason games, McKnight was targeted just three times with one reception.

Given the lack of production from his competitors, McKnight’s strong showing is enough to put him in the lead for the final receiving job, though he shouldn’t get too confident.

Moving Down: The margin between the lead horse in this race and last place is incredibly tight, so the room for error is nonexistent.

Nick Williams made the biggest mistake of any of the Broncos’ depth receivers when he muffed a punt return in the first half. While that may not seem like a big deal, it’s huge. Whoever wins the Broncos’ return job will also likely win the final receiving role.

Williams was also a non-factor the rest of the game, touching the ball just one other time, a three-yard reception.

2nd-3rd string Inside Linebacker: Alexander Johnson (45) vs. Keishawn Bierria (40) vs. Josh Watson (54)

Moving up: After a less-than-impressive outing against the Seahawks, Watson returned to his Hall of Fame Game form with another strong game. He misplayed a handoff on the first 49ers drive of the second half that led to a touchdown, but was one of Denver’s best linebackers outside that play.

Given Alexander Johnson’s stellar preseason, Watson’s play might not be enough for him to make the final roster but it should be. The only reason the Broncos shouldn’t carry Watson onto the final 53 man squad is if they feel absolutely positive he’ll make it to ther practice squad.

Watson shows strong, consistent tackling with strong instincts. Coverage is still an area where he needs to improve but he does show promise. With the Broncos’ inside linebacking core in utter disarray, they can’t allow a potential diamond in the rough to walk out the door in Watson.

Moving Down: It’s hard to find a place for Keishawn Bierria on the Broncos’ final roster, even with their depleted linebacking corps.

He’s not exceptional against the run or in pass coverage, and he doesn’t offer as much as his fellow linebackers on special teams. With each game that passes, it feels like Bierria tumbles another step down the depth chart.

Joe Dineen, who was injured, appears to be the only linebacker with a worse chance of making the final roster than Bierria.