// yukicoder: No.673 カブトムシ // 2019.5.2 bal4u #include #define M 1000000007 long long extended_gcd(long long a, long long b, long long *x, long long *y) { long long d; if (b == 0) { *x = 1; *y = 0; return a; } d = extended_gcd(b, a % b, y, x); *y -= a / b * (*x); return d; } int inverse(long long a) { long long x, y; extended_gcd(a, (long long)M, &x, &y); return (int)((x + M) % M); } int bigPow(long long x, long long p) { long long r = 1; while (p) { if (p & 1) r = r * x % M; x = x * x % M; p >>= 1; } return (int)r; } int main() { long long B, C, D, ans; scanf("%lld%lld%lld", &B, &C, &D); if (C == 1) ans = (B % M) * (D % M); else { ans = ((B % M) * (C % M)) % M; ans = (ans * ((M+bigPow(C % M, D)-1) % M)) % M * inverse(C-1); } printf("%d\n", ans % M); return 0; }