import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C
import Data.Maybe (fromJust)
import Data.List (sort)
import Control.Monad (forM, replicateM)

getInts :: IO [Integer]
getInts = map (fst . fromJust . C.readInteger) <$> C.words <$> B.getLine

rsort :: (Ord a) => [a] -> [a]
rsort = reverse . sort

md = 1000000000 + 7 :: Integer

powm :: Integer -> Integer -> Integer
powm _ 0 = 1
powm x y = powm (x*x `mod` md) (y `div` 2) * (if y `mod` 2== 0 then 1 else x) `mod` md

inv :: Integer -> Integer
inv x = powm x (md - 2) :: Integer

choose :: Integer -> Integer -> Integer
choose n 0 = 1
choose n m = (choose (n-1) (m-1)) * n * (inv m) `mod` md

main :: IO ()
main = do
    [n, m, k] <- getInts
    let val = (m * m * (sum n) + n * n * sum(m))`mod` md
    print $ val * choose (n*m-2) (k-2) `mod` md
    where
        sum w = (w * w * (w+1) `div` 2 - w * (w+1) * (2*w + 1) `div` 6) `mod` md
