MOD = 10**9 + 7 def sieve(n): if n < 2: return [] is_prime = bytearray([1]) * (n + 1) is_prime[0] = is_prime[1] = 0 for i in range(2, int(n**0.5) + 1): if is_prime[i]: is_prime[i*i::i] = b'\x00' * len(is_prime[i*i::i]) primes = [i for i, val in enumerate(is_prime) if val] return primes A, B, N = map(int, input().split()) primes = sieve(B) mod_minus1 = MOD - 1 result = 1 for p in primes: current_sum = 0 pm = p while pm <= B: cm = (B // pm) - ((A - 1) // pm) if cm == 0: break current_sum = (current_sum + pow(cm, N, mod_minus1)) % mod_minus1 pm *= p if current_sum != 0: result = (result * pow(p, current_sum, MOD)) % MOD print(result)