#include #include using namespace std; using namespace atcoder; #define rep(i,m,n) for (int i = (int)(m); i < (int)(n); i++) #define ll long long #define modint modint1000000007 const ll MOD = 1000000007; long long pow(long long x, long long n, long long mod) { long long ret = 1; while (n > 0) { if (n & 1) ret = ret * x % mod; // n の最下位bitが 1 ならば x^(2^i) をかける x = x * x % mod; n >>= 1; // n を1bit 左にずらす } return ret; } int main(){ ll A,B,N; cin >> A >> B >> N; vector cnt(B+1,0); for(ll i=B;i>0;i--){ cnt[i] = (cnt[i] + pow(B/i - (A-1)/i,N,MOD-1))%(MOD-1); for(ll j=2*i;j < B+1;j+=i){ cnt[i] = (cnt[i] - cnt[j])%(MOD-1); } } ll ans = 1; rep(i,1,B+1){ ans *= pow((ll)(i),cnt[i],MOD); ans %= MOD; }; cout << ans << endl; return 0; }