You do integer division:
mpz_set_d (next, 4 / (a * b * c));
// ^ ^^^^^^^^^^^
// int int
Dividing two integers will round them towards zero, which is 0
in this case, since a * b * c > 4
in every iteration.
You could fix this by writing
mpz_set_d (next, 4.0 / (a * b * c));
// ^^^ ^^^^^^^^^^^
// double int
However, you should perform the division using GMP since the code above suffers from the limits of the native number types. Also, the result of this division shouldn't be stored in a GMP integer, but in a GMP float:
mpf_t next;
//...
mpf_set_d(next, 4.0);
mpf_div(next, a);
mpf_div(next, b);
mpf_div(next, c);
Note that also a, b, c have to be GMP floats in order to make this work.