#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll mod = 1000000007;
struct Matrix {
ll num[2][2];
void initial() {
num[0][0] = num[0][1] = num[1][0] = num[1][1] = 0;
}
};
Matrix Multiply(Matrix A, Matrix B) {
Matrix C;
C.initial();
C.num[0][0] = ((A.num[0][0] * B.num[0][0]) % mod + (A.num[0][1] * B.num[1][0]) % mod) % mod;
C.num[0][1] = ((A.num[0][0] * B.num[0][1]) % mod + (A.num[0][1] * B.num[1][1]) % mod) % mod;
C.num[1][0] = ((A.num[1][0] * B.num[0][0]) % mod + (A.num[1][1] * B.num[1][0]) % mod) % mod;
C.num[1][1] = ((A.num[1][0] * B.num[0][1]) % mod + (A.num[1][1] * B.num[1][1]) % mod) % mod;
return C;
}
Matrix MatrixPower(Matrix m, ll p){
Matrix res;
res.initial();
res.num[0][0] = res.num[1][1] = 1;
for ( ; p != 0; p >>= 1){
if (p & 1){
res = Multiply(res, m);
}
m = Multiply(m, m);
}
return res;
}
int main () {
ll x, y, p;
Matrix A;
Matrix B;
Matrix ans;
A.initial(); B.initial(); ans.initial();
cin >> x >> y >> p;
x %= mod; y %= mod;
if (p == 1) {
cout << x << endl;
return 0;
}
A.num[0][0] = 1; A.num[0][1] = 1; A.num[1][0] = 1; A.num[1][1] = 0;
B.num[0][0] = y; B.num[0][1] = x; B.num[1][0] = x; B.num[1][1] = 0;
ans = MatrixPower(A, p - 2);
ans = Multiply(ans, B);
cout << ans.num[0][0] << endl;
return 0;
}