The trip is doable on 3 weeks. But there will be a lot of driving. Most of them between 4-5 hours I guess. Rocky Mountain National Park would be a bit far in my opinion (although Arches National Park will be on the way there).
If you want to add something on to your itinerary, may I suggest Petrified Forest and Painted Desert after Grand Canyon? Also, as a matter of personal preference, I would go to Joshua Tree National Park and 29 Palms as an alternative to Mojave National Park.
A rough itinerary could be something like the following, where the longest drives would be between (1) Yosemite and Death Valley (over 7 hours), (2) Petrified Forest and Joshua Tree (over 6 hours), and (3) between LA and San Francisco (about 8 hours). The itinerary does account for time taken to be spent in the area, not just to drive by the national park and on to the next destination. (am) indicates morning, (pm) indicates from noon onwards, (late pm) indicates late evening.
Day 1-3 : San Francisco
Day 4 (am) : Leave for Yosemite
Day 4 (pm) / Day 5(am) : Yosemite
Day 5 (pm) : Leave for Death Valley
Day 5 (late pm) / Day 6 : Death Valley
Day 7 (am) : Leave for Las Vegas
Day 7 (pm) / Day 8-9 : Las Vegas
Day 10 (am) : Leave for Grand Canyon
Day 10 (pm) / Day 11 : Grand Canyon
Day 12 (am) : Leave for Petrified Forest
Day 12 (pm) / Day 13 : Petrified Forest, Painted Desert
Day 14 (am) : Leave for Joshua Tree National Park
Day 14 (late pm) / Day 15 : Joshua Tree, 29 Palms
Day 16 (am) : Leave for LA
Day 16 (pm) / Day 17-19 : LA
Day 20 (am) : Leave for San Francisco
Day 20 (late pm) : San Francisco
Day 21 : Leave USA
This itinerary is sort of based on a combination of 2 roadtrips that my friends and I did, tweaked about a little.
Regardless of what your final decision and plan would be, good luck and I hope you and your girlfriend have lots of fun on this roadtrip!