""" https://yukicoder.me/problems/no/1259 M=1以外はすべて同じと扱える K回後に1にいる場合だけを計算すればよい 1ループがKの約数ならおk Kの約数でN以下のやつを見つける """ def inverse(a,mod): #aのmodを法にした逆元を返す return pow(a,mod-2,mod) N,K,M = map(int,input().split()) mans = 0 nfac = 1 mod = 10**9+7 npow = pow(N,N-1,mod) inv = inverse(N,mod) for i in range(1,N+1): #i回移動で戻る場合を計算する if K % i == 0: mans += npow * nfac mans %= mod #print (i,nfac,npow) nfac = nfac * (N-i) % mod npow = npow * inv % mod if M == 1: print (mans) else: ans = (pow(N,N,mod) - mans) * inverse(N-1,mod) % mod print (ans)