#include <cstdio>
#include <cstring>
typedef long long LL;
const int N = 2;
struct Matrix {
LL ary[N][N];
void init() {
memset(ary, 0, sizeof(ary));
}
Matrix() {
init();
}
};
const Matrix operator*(const Matrix & A, const Matrix & B) {
Matrix t;
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
for (int k = 0; k < N; ++k)
t.ary[i][j] += A.ary[i][k] * B.ary[k][j];
return t;
}
LL quick_pow(LL p, LL q, LL n) {
if (n == 0) return 2;
if (n == 1) return p;
if (n == 2) return p * p - 2 * q;
Matrix ans, tmp;
tmp.ary[0][0] = p;
tmp.ary[1][0] = -q;
tmp.ary[0][1] = 1;
tmp.ary[1][1] = 0;
ans.ary[1][1] = p;
ans.ary[0][1] = ans.ary[1][0] = p * p - 2 * q;
ans.ary[0][0] = ans.ary[0][1] * p - ans.ary[1][1] * q;
n -= 3;
while (n) {
if (n & 1)
ans = ans * tmp;
n >>= 1;
tmp = tmp * tmp;
}
return ans.ary[0][0];
}
int main() {
LL p, q, n;
while (~scanf("%lld%lld", &p, &q)) {
if (scanf("%lld", &n) == EOF)
break;
printf("%lld\n", quick_pow(p, q, n));
}
return 0;
}