#include<cstdio>
using namespace std;
const int mod=998244353;
int n,m,k;
int res;
int pow(int x,int t)
{
	int r=1;
	while(t) {
		if(t&1) {
			r=1ll*r*x%mod;
		}
		t>>=1,x=1ll*x*x%mod;
	}
	return r;
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	if((n==1)||(m==1)) {
		res=pow(k,n==1?m:n);
	} else {
		for(int i=1;i<=k;++i) {
			res=(res+1ll*(pow(i,n)-pow(i-1,n))*pow(k-i+1,m))%mod;
		}
	}
	printf("%d\n",(res+mod)%mod);
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
    #define author          "Sihare0riginals"
    #define ss              string 
    #define lli             long long int
    #define ld              long double
    #define f               first
    #define s               second
    #define all(v)          v.begin(),v.end()
    #define I(a,i)          memset(a,i,sizeof(a));
    #define pb              push_back
    #define mp              make_pair
    #define L(i,start,end)  for(lli i=start;i<=end;i++)
    #define R(i,start,end)  for(lli i=start;i>=end;i--)
    #define ip(n)           cin>>n;lli ip[n+1];L(i,1,n)cin>>ip[i];
const lli LINF = 1e18,mod=998244353;
void Bl0ck_M0mb0();
lli power(lli a,lli b,lli m){ if(b==0) return 1; if(b==1) return a%m;
    lli t=power(a,b/2,m); t=(t*t)%m; if(b&1) t=(t*a)%m; return t;}
 
signed main()
{
    Bl0ck_M0mb0();
    lli t=1;
    //cin>>t;
    while(t--){
        lli n,m,k,ans=0;
        cin>>n>>m>>k;
        L(i,1,k)
        {
            lli val=(power(i,n,mod)-power(i-1,n,mod)+mod)%mod;
            //cout<<val<<" ";
            lli x=k-i+1;
            lli val1;
            if(n==1)
            val1=(power(x,m,mod)-power(x-1,m,mod)+mod)%mod;
            else if(m!=1)
                val1=power(x,m,mod);
            else
                val1=1;
            val*=val1;
            val%=mod;
            //cout<<x<<" "<<val<<endl;
            ans+=val;
            ans%=mod;
        }
        cout<<ans<<endl;
    }
    return 0;
}





























void Bl0ck_M0mb0(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    #ifndef ONLINE_JUDGE
    freopen("ip.txt","r",stdin);
    freopen("op.txt","w",stdout);
    #endif
}
/*
#define dbg1D(i,start,end,arr) for(lli i=start;i<=end;i++) cout<<i<<"th : "<<arr[i]<<endl;
#define dbg2D(i,j,s1,e1,s2,e2,arr) for(lli i=s1;i<=e1;i++){cout<<i<<"th :";for(lli j=s2;j<=e2;j++)cout<<arr[i][j]<<" ";cout<<endl;}
#define M map<lli,lli> \n #define sz(s) s.size()-1
#define P pair<lli,lli> 
#define V vector<lli>
lli dx[4]={-1, 0, 0, +1};
lli dy[4]={0, -1, +1, 0};
lli power(lli a,lli b,lli m){ if(b==0) return 1; if(b==1) return a%m;
    lli t=power(a,b/2,m); t=(t*t)%m; if(b&1) t=(t*a)%m; return t;}
lli modInverse(lli a, lli m) { return power(a, m-2, m); } */