#include <set>
#include <bitset>
#include <list>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <string>
#include <vector>
#include <ios>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <utility>
#include <complex>
#include <numeric>
#include <functional>
#include <cmath>
#include <ctime>
#include <climits>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cassert>
using namespace std;
#define CFF freopen ("aaa.txt", "r", stdin)
#define CPPFF ifstream cin ("aaa.txt")
#define LL long long
const int INF = 0x7FFFFFFF;
const int MOD = 1e9 + 7;
const double EPS = 1e-6;
const double PI = 2 * acos (0.0);
const int maxn = 2;
long long n = 2;//表示方阵的尺寸,必须恰好为运算的大小
//申请变量
struct Mat
{
long long mat[maxn][maxn];
};
//重载Mat乘法运算
Mat operator * (Mat a, Mat b)
{
Mat c;
memset (c.mat, 0, sizeof (c.mat));
for (long long k = 0; k < n; k++)
{
for (long long i = 0; i < n; i++)
{
if (a.mat[i][k] == 0) continue;
for (long long j = 0; j < n; j++)
{
if (b.mat[k][j] == 0) continue;
c.mat[i][j] = (c.mat[i][j] + ((a.mat[i][k] % (MOD - 1)) * (b.mat[k][j] % (MOD - 1)) % (MOD - 1)))
% (MOD - 1);
}
}
}
return c;
}
//重载Mat乘幂运算
Mat operator ^ (Mat a, long long k)
{
Mat c;
for (long long i = 0; i < n; i++)
for(long long j = 0; j < n; j++)
c.mat[i][j] = (i == j);
while (k)
{
if(k & 1)
c = c * a;
a = a * a;
k >>= 1;
}
return c;
}
LL mod_f (LL a, LL b, LL p)
{
LL res = 1, tt = (a % p + p) % p;
while (b)
{
if (b & 1)
res = res * tt % p;
tt = tt * tt % p;
b >>= 1;
}
return res;
}
int main()
{
// CPPFF;
LL aa, bb, nn;
while (cin >> aa >> bb >> nn)
{
Mat ma;
ma.mat[0][0] = 1, ma.mat[0][1] = 1;
ma.mat[1][0] = 1, ma.mat[1][1] = 0;
Mat mb;
mb.mat[0][0] = 1, mb.mat[1][0] = 1;
Mat res;
LL ta, tb;
if (nn == 0)
cout << aa % MOD << endl;
else if (nn == 1)
cout << bb % MOD << endl;
else if (nn == 2)
cout << ((aa % MOD) * (bb % MOD)) % MOD << endl;
else if (nn >= 3)
{
res = ma ^ (nn - 3);
res = res * mb;
ta = res.mat[0][0];
res = ma ^ (nn - 2);
res = res * mb;
tb = res.mat[0][0];
// cout << ta << " " << tb << endl;
ta = ta % (MOD - 1), tb = tb % (MOD - 1);
LL res1 = mod_f (aa, ta, MOD), res2 = mod_f (bb, tb, MOD);
cout << ((res1 % MOD) * (res2 % MOD)) % MOD << endl;
}
}
return 0;
}