const MOD: u64 = 1_000_000_007; fn main() { let mut bcd = String::new(); std::io::stdin().read_line(&mut bcd).ok(); let mut bcd = bcd.trim().split_whitespace(); let mut b: u64 = bcd.next().unwrap().parse().unwrap(); let mut c: u64 = bcd.next().unwrap().parse().unwrap(); let mut d: u64 = bcd.next().unwrap().parse().unwrap(); b = b % MOD; c = c % MOD; let mpow = |mut x, mut e, m| { let mut y = 1; while e > 0 { if e & 1 == 1 { y = y * x % m; } x = x * x % m; e >>= 1; } y }; let ans = if c ==1 { d % MOD * b % MOD } else { b * c % MOD * (mpow(c, d, MOD) - 1) % MOD * mpow(c - 1, MOD - 2, MOD) %MOD }; println!("{}", ans); }