from functools import reduce MOD = int( 1e9 ) + 7 H, W, K = map( int, input().split() ) def gcd( a, b ): if b == 0: return a return gcd( b, a % b ) def is_prime( n ): return 1 < n and all( n % i for i in range( 2, int( n ** 0.5 ) + 1 ) ) def get_prime( n ): return [ i for i in range( 1, int( n ** 0.5 ) + 1 ) if n % i == 0 and is_prime( i ) ] + [ n // i for i in range( 1, int( n ** 0.5 ) + 1 ) if i * i != n and n % i == 0 and is_prime( n // i ) ] hp, wp = get_prime( H ), get_prime( W ) def phi( x, memo = {} ): if x in memo: return memo[ x ] if H % x == 0: res = x for p in hp: if p > x: break if x % p == 0: res = res // p * ( p - 1 ) memo[ x ] = res return res else: res = x for p in wp: if p > x: break if x % p == 0: res = res // p * ( p - 1 ) memo[ x ] = res return res def factors( n ): return [ i for i in range( 1, int( n ** 0.5 ) + 1 ) if n % i == 0 ] + [ n // i for i in range( 1, int( n ** 0.5 ) + 1 ) if i * i != n and n % i == 0 ] hf, wf = factors( H ), factors( W ) ans = 0 for a in hf: for b in wf: ans += pow( K, H // a * W // b * gcd( a, b ) % ( MOD - 1 ), MOD ) * phi( a ) * phi( b ) ans %= MOD ans = ans * pow( H * W, MOD - 2, MOD ) % MOD print( ans )