SAN FRANCISCO — Calvin Johnson is a big guy at 6-foot-5, 239 pounds.

But against 49ers cornerback Nate Clements, he practically disappeared.

"I feel like I'm the best cornerback in the league,'' Clements said. "I'll test my skills against anybody."

Johnson managed just four catches for 40 yards, with nothing longer than 15 yards, in the 49ers' 31-13 victory at Candlestick Park on Sunday. This was an epic drop-off from his first two games, when Johnson totaled 207 yards against Atlanta and 129 yards against Green Bay.

"We knew where the ball was going,'' Clements said.

To stifle Johnson, Clements went toe-to-toe with one of the NFL's most physical receivers. He jammed Johnson at the line of scrimmage and "stayed in front of him and made sure not to let him get going."

Clements is 6-0, 205-pounds and said he will play whatever style he needs to stop an opponent's top threat.

"I like the challenge of playing against the No. 1 guy. It just so happened that the No. 1 guy this week was 6-5, 230,'' he said.

Walt Harris was equally tough on Roy Williams, limiting him to a pair of 9-yard catches. Williams, meanwhile, indicated that he missed Mike Martz, now calling plays for the 49ers.

Asked to compare the offenses, Williams said: "They've got the passing mind calling the plays. So you can't compare our offense to the (49ers) offense. It makes no sense."

O'Sullivan vs. KItna

A year ago, J.T. O'Sullivan backed up Jon Kitna in Detroit. On Sunday, O'Sullivan outplayed his mentor by posting about double his passer rating — 123.3 to 61.3.

"I'm not the least bit surprised. In fact, I'm very happy for him,'' Kitna said. "He's surrounded by some very talented players, and he has an outstanding offensive coordinator."

Using his feet

O'Sullivan kept several plays alive with his feet, rushing eight times for 32 yards. But some of those plays came with considerable peril.

O'Sullivan refused to slide at the end of his runs, and coach Mike Nolan was tempted to tell his quarterback to stop endangering himself. Nolan decided to wait until a practice session.

"I thought I would just let him play,'' the coach said. "Believe me, there were two or three times I wanted to say something. But I didn't want to take a guy out of his zone."

O'Sullivan pled guilty, saying: "Just me being out of control.''

Rossum runs it in

Allen Rossum's 1-yard run in the fourth quarter was his eighth career touchdown. His previous scores came on three punt returns and four kickoff returns.

This was his first score on offense.

"I was a little shocked when they sent me in," Rossum said. "Then I was more shocked when I found out it was going to be me getting the ball. Who? Me?"

Oddity of the week: Both Rossum and the defender he beat, safety Kalvin Pearson, share Oct. 22 as a birthday.

Extra points

The 49ers went over 300 yards in total offense just twice last season. Now they've done it in back-to-back weeks with 351 against Seattle and 370 against Detroit. ... Frank Gore has a rushing touchdown in each of the 49ers' first three games. He also passed Steve Young (3,581) and Kevan Barlow (3,614) to move into seventh place on the 49ers' all-time list. ... On one play Sunday, Gore lined up at quarterback and took a direct snap. He charged ahead for only a 3-yard gain. ... Tarrell Brown, last year's fifth-round pick, had his first career interception, in the third quarter. ... Isaac Bruce played in his 200th career game, most among active receivers. ... This was the 60th all-time meeting between the teams, with the 49ers holding a 33-26-1 advantage in a series that dates to 1950.

— Daniel Brown,

MediaNews staff