#include<iostream>
using namespace std;
typedef long long ll;
const ll mod = 10007;
ll N, X, Y;
struct Matrix {
static const int N = 15;
ll a[N][N];
Matrix(ll e = 0) {
for (int i = 1; i <= 4; i++)
for (int j = 1; j <= 4; j++)
a[i][j] = e * (i == j);
}
Matrix mul(Matrix A, Matrix B) {
Matrix ans(0);
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4; j++) {
for (int k = 1; k <= 4; k++) {
ans.a[i][j] = (ans.a[i][j] + A.a[i][k] * B.a[k][j]) % mod;
}
}
}
return ans;
}
Matrix ksm(Matrix A, ll b) {
Matrix ans(1);
while (b) {
if (b & 1)ans = mul(ans, A);
A = mul(A, A); b >>= 1;
}
return ans;
}
};
ll c[5];
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
c[1] = 2; c[2] = 1; c[3] = 1; c[4] = 1;
while (cin >> N >> X >> Y) {
Matrix tmp;
if (N < 2) {
cout << N + 1 << "\n";
continue;
}
tmp.a[1][1] = 1;
tmp.a[1][2] = X * X % mod;
tmp.a[1][3] = 2 * X * Y % mod;
tmp.a[1][4] = Y * Y % mod;
tmp.a[2][2] = X * X % mod;
tmp.a[2][3] = 2 * X * Y % mod;
tmp.a[2][4] = Y * Y % mod;
tmp.a[3][2] = X % mod;
tmp.a[3][3] = Y % mod;
tmp.a[4][2] = 1;
tmp = tmp.ksm(tmp, N - 1);
ll res = 0;
for (int i = 1; i <= 4; ++i)
res = (res + tmp.a[1][i] * c[i]) % mod;
cout << res << "\n";
}
}