val fact = Array(200010) { 1L }
val invfact = Array(200010) { 1L }

val MOD = 1000000007L;

fun comb(n: Long, m: Long): Long {
    if ( n < m )
        return 0L

    return fact[n.toInt()] * invfact[(n - m).toInt()] % MOD * invfact[m.toInt()] % MOD
}

fun powMod(n: Long, l: Long): Long {
    var k = l
    var a = 1L;
    var m = n
    while (k > 0) {
        if (k % 2 == 1L) {
            a = (a * m) % MOD;
        }
        m = (m * m) % MOD;
        k /= 2L
    }

    return a
}

fun invMod(n: Long): Long {
    return powMod(n, MOD - 2)
}

fun f(n: Long, m: Long): Long {
    var res = 0L
    val p = invMod(comb(n * m, 2))

    for (i in 1L until n) {
        res += (n - i) * i % MOD * m % MOD * m % MOD * p % MOD
        res %= MOD
    }

    return res
}

fun main(args: Array<String>) {
    val (N, M, K) = readLine()!!.split(" ").map { s -> s.toLong() }

    for(i in 1 until 200010) {
        fact[i] = fact[i - 1] * i % MOD
        invfact[i] = invfact[i - 1] * invMod(i.toLong()) % MOD
    }

    val a = K * (K - 1) % MOD * invMod(2) % MOD
    val b = f(N, M) * a % MOD
    val c = f(M, N) * a % MOD

    val res = (b + c) % MOD * comb(N * M, K) % MOD

    println(res)
}