#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus > 199711L #include #include #include #include using namespace __gnu_pbds; // tree, rb_tree_tag, tree_order_statistics_node_update> name; // order_of_key // find_by_order #endif using namespace std; #define pb push_back #define ppb pop_back #define mp make_pair #define fs first #define sc second #define abs(a) ((a) < 0 ? -(a) : (a)) #define sqr(a) ((a) * (a)) typedef unsigned int uint; typedef long long ll; typedef unsigned long long ull; const double eps = 1e-9; const int mod = (int)1e+9 + 7; const double pi = acos(-1.); const int maxn = 100100; ll binpow(ll a, ll b) { ll ret = 1; while(b) { if(b & 1) { ret = ret * a % mod; } a = a * a % mod; b >>= 1; } return(ret); } int main() { #ifdef SOL { // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); } #else { srand(time(0)); const string file = ""; if(!file.empty()) { freopen((file + ".in").c_str(), "r", stdin); freopen((file + ".out").c_str(), "w", stdout); } } #endif ll a, b, t; scanf("%lld%lld%lld", &a, &b, &t); printf("%lld\n", binpow((a + b) >> 1, t)); #ifdef SOL { fflush(stdout); fprintf(stderr, "%.3lf ms\n", 1000. * clock() / CLOCKS_PER_SEC); fflush(stderr); } #endif return(0); } // by Riri