One change. For those you only rarely require to travel to any of your offices, pay the same regardless of where they live. All remote locations are the same as far as the company is concerned [1].
For a company with N offices, there are only N+1 locations as far as pay should go: the local rate in each of the N office's local area, paid to people who are required to be on location there more than rarely, and the rate for everyone else.
On those rare occasions when someone in the everyone else group is required to come to one of the offices, treat it like any other required business trip and the company pays for travel and lodging and food.
[1] to a first approximation. If the company needs a job to be done on a particular daily schedule, then there are two remote locations as far as the company is concerned: time zones where that schedule is reasonable, and everywhere else.
The point is that you as a company do not care where your remote workers are except perhaps they need to be in a timezone close to that of whichever office of yours they are working most closely with.
If you can pay remote workers what would be a good wage in El Paso or Tulsa or Boise and that is sufficient to get you enough good workers from such places to fill your needs, you don't care that it is not enough to get workers from Boston or Minneapolis or Chicago because you don't specifically need workers from Boston or Minneapolis or Chicago.
(i'm being ironic here, btw)
Pay market rates. If you want people on location in SF, pay SF market rates. If you want people occasionally on location in SF, pay SF market rates. If you want people to travel rarely to SF pay local area rates to the nearest office the person lives by.
SF is neither the center of the universe nor where all the interesting problems/projects reside.