#include <bits/stdc++.h>
#define INT long long int
#define MOD 1000000007ll
using namespace std;
INT n, m, k;
char nm[50][100], nmo[50][100];
map<INT, map<INT, INT> > d;
INT f(INT x, INT y)
{
    if( d[x][y] ) return d[x][y];
    if( y == 0 ) return 1;
    INT &ret = d[x][y] = (f(x, y>>1)*f(x, y>>1))%MOD;
    if( y&1 ) return ret = (ret*x)%MOD;
    return ret;
}
int main()
{
    for(int p = 1 ; p <= 30 ; p++ )
    {
        d.clear();
        sprintf(nm[p], ".%d.in", p);
        freopen(nm[p], "r",stdin);
        sprintf(nmo[p], ".%d.out", p);
        freopen(nmo[p], "w",stdout);
        scanf("%lld%lld%lld", &n, &m, &k);
        if( ((n%2ll)+(m%2ll))%2ll==1ll and k==-1ll ) cout<<0<<endl, 0;
        else cout<<f(f(2ll, n-1), m-1)<<endl;
    }
}

