fun main() { val builder = StringBuilder() // modきらい // ほかの解答コード写経したけど何をしているのか全然わからない…… val mod = 1000000007L val (b, c, d) = readInputLine().split(" ").map { it.toLong() } if (c % mod == 1L) { builder.appendln((b % mod) * (d % mod) % mod) } else { val t1 = (b % mod) * (c % mod) % mod val t2 = (mod - t1) % mod * pow((c - 1L) % mod, mod - 2L, mod) % mod val ans = ((t1 - t2 + mod) % mod * pow(c % mod, d - 1L, mod) % mod + t2) % mod builder.appendln(ans) } print(builder.toString()) } fun readInputLine(): String { return readLine()!! } fun pow(x: Long, n: Long, mod: Long): Long { var ret = 1L var base = x var nTmp = n while (nTmp != 0L) { if (nTmp % 2L != 0L) { ret = ret * base % mod } base = base * base % mod nTmp /= 2L } return ret }