The headwaters of Cottonwood Creek originates as North, Middle, and South Forks and numerous smaller tributaries along the north-western rim of the Sacramento Valley. The North Fork rises near Shasta Bally, a peak in the southern Klamath Mountains. It flows southwest, through a small reservoir, Rainbow Lake. Below Rainbow Lake it flows south, receiving Jerusalem Creek from the right, and turns east, emerging from the mountains near the town of Ono, where it turns southeast to flow through the Klamath foothills. The larger Middle Fork originates at about on McFarland Ridge in the Shasta-Trinity National Forest and flows east to Platina, where it turns briefly north before heading east again, cutting a deep canyon before its confluence with Beegum Creek, its major tributary. Below Beegum Creek it forms the border of Shasta and Tehama counties. The North and Middle Forks join near Janesville to form the main stem of Cottonwood Creek; below this confluence the main stem continues to define the border between the two counties.