#include using lint=long long; using real=long double; int main(){ std::cin.tie(nullptr);std::ios_base::sync_with_stdio(false); std::cout.setf(std::ios_base::fixed);std::cout.precision(15); lint mod=1'000'000'007; lint b,c,d;std::cin>>b>>c>>d;b%=mod,c%=mod; assert(c==1||c%mod!=1); auto cal=[b,c,mod,memo=std::map>()] (auto&&cal,lint x)mutable->std::pair { if(x==0)return {0,1}; if(x==1)return {1,c}; if(auto found=memo.find(x);found!=memo.end()){ return found->second; } auto&&[fi,ci]=cal(cal,x/2); auto&&[fj,cj]=cal(cal,(x+1)/2); return memo[x]={(fi+ci*fj)%mod,(ci*cj)%mod}; }; std::cout<<((cal(cal,d).first*b)%mod*c)%mod<<'\n'; }