#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define prime 998244353
#define watch(x) cout << (#x) << " = " << (x) << "\n"
#define printArray(arr,n) for(int i=0;i<n;i++) cout << (#arr) << "[" << i << "]" << " = " << (arr[i]) << "\n"
#define printMatrix(arr,m,n) for(int i=0;i<m;i++) for(int j=0;j<n;j++) cout << (#arr) << "[" << i << "]" << "[" << j << "]" << " = " << (arr[i][j]) << "\n"

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int T;
    //cin>>T;
    T=1;
    while(T--){
    	//Code
    	ll a,b,c;
    	cin>>a>>b>>c;
    	
    	ll ans = 1,A,B,C;
    	A = (a*(a+1))/2;
		A%=prime;
		B = (b*(b+1))/2;
		B%=prime;
		C = (c*(c+1))/2;
		C%=prime;  
		
		ans = A*B;
		ans%=prime;
		ans*=C;
		ans%=prime;
		
		cout<<ans<<"\n";  	
	}
    return 0;
}

/*** "Bismillahir Rahmanir Raheem" ***/
/*** "ALHAMDULILLAH for Everything" ***/
/*** "Md. Al Asad Nur Riyad" ***/
/*
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")
*/
 
#include<bits/stdc++.h>
using namespace std;
#define  fastt      ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define  ll         long long
#define  debug      printf("Come here!")
#define  inf        1000000000000000000
#define  mem(a,b)   memset(a,b,sizeof(a))
#define  case(x)    cout << "Case " << x <<": "
#define  all(qz)    qz.begin(),qz.end()
#define  rall(qz)   qz.rbegin(),qz.rend()
#define  Sqr(x)     ((x) * (x))
 
#define  mod        998244353
#define  pi         acos(-1.0)
#define  cos(a)     cos(a*pi/180)
#define  sin(a)     sin(a*pi/180)
#define  tan(a)     tan(a*pi/180)
#define  cosi(a)    acos(a)/(pi/180)
#define  sini(a)    asin(a)/(pi/180)
#define  tani(a)    atan(a)/(pi/180)
 
#define  pql        priority_queue<ll>
#define  minpql     priority_queue<ll,vector<ll>,greater<ll> >

#define  setbits(x)     __builtin_popcountll(x)
#define  zerobits(x)    __builtin_ctzll(x)
 
#define toll(a) atoll(a.c_str())
string tostr(ll a) {stringstream rr;rr<<a;return rr.str();}
ll Pow(ll c,ll d){return d==0?:c*pow(c,d-1);}
ll gcd(ll a,ll b) {return b==0? a:gcd(b,a%b);}
ll lcm(ll a,ll b) {return ((a*b)/gcd(a,b));}

/** Functions Start **//*
TP inline F setBit(F mask, S pos) { return mask |= ((F)1 << pos) ; }
TP inline bool getBit(F mask, S pos) { return (bool)(mask & ((F)1 << pos)) ; }
TP inline F resetBit(F mask, S pos) { return mask &= (~((F)1 << pos)) ; }
TP inline F toggleBit(F mask, S pos){ return mask ^= ((F)1 << pos) ; }
*/
ll egcd(ll a,ll b,ll &x,ll &y){if(b==0){x=1;y=0;return a;}ll x1,y1;ll gcd=egcd(b,a%b,x1,y1);x=y1;y=x1-y1*(a/b);return gcd;}
ll bigMod(ll a,ll b){a%=mod;ll res=1;while(b>0){if(b&1)res=(res*a)%mod;a=(a*a)%mod;b>>=1;}return res;}

inline ll MOD(ll a){ return (a%mod + mod) %mod ; }
inline ll modAdd(ll a,ll b){ return MOD( MOD(a) + MOD(b) ) ; }
inline ll modSub(ll a,ll b){ return MOD( MOD(a) - MOD(b) ) ; }
inline ll modMul(ll a,ll b){ return MOD( MOD(a) * MOD(b) ) ; }
inline ll modInv(ll a){ return bigMod(a,mod-2) ; }
/** Functions End **/

/** Direction Array **//*
int dx[]={-1, 0, 0, 1};
int dy[]={0, -1, 1, 0};
int dx1[]={-1, -1, -1, 0, 0, 0, 1, 1, 1};
int dy1[]={-1, 0, 1, -1, 0, 1, -1, 0, 1};
/** Direction Array ends **/
 
/* mpp.max_load_factor(0.25); mpp.reserve(1024); */
/* cout << fixed << setprecision(12);*/
/*-----------------------------------------------------*/



int main()
{
    fastt
    

    ll a,b,c;
    cin>>a>>b>>c;
    a=(a*(a+1))/2;
    b=(b*(b+1))/2;
    c=(c*(c+1))/2;
    cout<<modMul(a,modMul(b,c))<<endl;
    return 0;
}