#include<bits/stdc++.h>
typedef long long int ll;
using namespace std;
#define sz 1600008
#define mod 998244353
#define f first
#define s second
ll arr[sz+10],brr[sz+10];
ll num=1;
long long binpow(long long a, long long b) {
    a %= mod;
    long long res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}
int main()
{
  int t=1;
  //scanf("%d",&t);
  for(int cs=1;cs<=t;cs++)
  {
   ll n,m,k;
   scanf("%lld %lld %lld",&n,&m,&k);
   for(ll i=1;i<=k;i++)
   {
   	arr[i]=binpow(i,n);
   	brr[i]=binpow(i,m);
   }
   ll ans=0;
   ll last,fast;
   if(n==1 || m==1)
   {
   	for(ll i=1;i<=k;i++)
   {
    last=(arr[i]-arr[i-1]+mod)%mod;
    ll a=k-i+1;
    fast=(brr[a]-brr[a-1]+mod)%mod;
    last=(last*fast)%mod;
    ans=(ans+last)%mod;
   }
    printf("%lld\n",ans);
    return 0;
   }
   for(ll i=1;i<=k;i++)
   {
    last=(arr[i]-arr[i-1]+mod)%mod;
    ll a=k-i+1;
    fast=(brr[a]+mod)%mod;
    last=(last*fast)%mod;
    ans=(ans+last)%mod;
   }
   printf("%lld\n",ans);
  }
  return 0;
}
#include <bits/stdc++.h>
using namespace std;
#pragma optimize("-O3")
#define int long long int
#define f first
#define s second
#define pb push_back
#define endl '\n'
const int MOD=998244353;
const int N=2e5+5;
int num[N];
int num2[N];
int ex[N];
int ex2[N];




int add(int x, int y)
{
	return (x + y) % MOD;
}
 
int sub(int x, int y){
	return add(x, MOD - y);
}
 
int mul(int x, int y)
{
	return (x * 1ll * y) % MOD;
}
 
int binpow(int x, int y)
{
	int z = 1;
	while(y > 0)
	{
		if(y % 2 == 1)
			z = mul(z, x);
		x = mul(x, x);
		y /= 2;
	}
	return z;
}
 
int inv(int x)
{
	return binpow(x, MOD - 2);
}
 


main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n, m, k;
	cin>>n>>m>>k;
	num[1]=1;
	ex[1]=1;
	for(int i=2; i<=k; i++){
		num[i]=sub(binpow(i, n), ex[i-1]);
		ex[i]=add(ex[i-1], num[i]);
	}

	num2[k]=1;
	ex2[k]=1;
	for(int i=k-1; i>=1; i--){
		num2[i]=sub(binpow(k-i+1, m), ex2[i+1]);
		ex2[i]=add(ex2[i+1], num2[i]);
	}
	if(n==1 && m==1){
		cout<<k;
		return 0;
	}
	if(n==1){
		int ans=0;
		for(int i=1; i<=k; i++){
			ans=add(ans, num2[i]);
		}
		cout<<ans;
		return 0;
	}
	if(m==1){
		int ans=0;
		for(int i=1; i<=k; i++){
			ans=add(ans, num[i]);
		}
		cout<<ans;
		return 0;
	}
	int ans=0;
	
	for(int i=1; i<=k; i++){
		ans=add(ans, mul(num[i], binpow(k-i+1, m)));
	}
	cout<<ans;
	return 0;
}
