If xn has not yet a value,
x1=x2=...=xn
will set all variables to xn, and then if you do
xn=3
all of them will evaluate to 3.
If xn already has a value at the point of assignment, you can temporarily unset it using Block. For example
c=1
Block[{c}, a=b=c]
{a, b, c}
(*
==> {1, 1, 1}
*)
c=2
{a, b, c}
(*
==> {2, 2, 2}
*)
However, in that case the better option would be to do individual assignments using the standard SetDelayed:
a := c; b := c
This always works, even if c is already assigned a value.
Note however that this only works for assignments to c; assignments to a or b will not propagate to the other variables. To achieve that, you can additionally do
a /: (a=x_) := c=x
and the same with b. Basically this tells Mathematica that whenever it sees an expression of the form a=expression it should execute c=expression. Note however that this is not a catch-all; it doesn't cover other ways a might get a value assigned; the most obvious being :=. You'd have to find out a complete set of ways how a might be changed and write a replacement rule for each of them (assuming this is possible; in some cases, a might be buried too deeply in the expression). In the end, it's probably a better idea to just restrict assignments to be done on c.