#include<bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int i = 0; i < n; i++)
#define Rep(i,n) for(int i = 1; i <= n; i++)
#define sz(x) int(x.size())
#define All(v) v.begin(), v.end()
#define rAll(v) v.rbegin(), v.rend()
#define YesorNo(a) printf(a ? "Yes\n" : "No\n")
#define endl '\n'
#define fi first
#define se second
using ll = long long;
using ld = long double;
using P = pair<int,int>;
using Pl = pair<ll,ll>;
template<class T> using V = vector<T>;
const int dx[] = {0,1,0,-1,1,1,-1,-1};
const int dy[] = {1,0,-1,0,1,-1,-1,1};
ll ceil(const ll &a, const ll &b){return ((a)+(b)-1)/b;}
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
struct INF { template<class T> operator T() { return numeric_limits<T>::max() / 2; } } INF;
const ld eps = 1e-11;
int sgn(const ld &r) {return (r > eps) - (r < eps);}

const ll mod = 998244353;

int main(){

    ll a, b, c;
    cin >> a >> b >> c;
    a = ((a+1)*a/2) % mod;
    b = ((b+1)*b/2) % mod;
    c = ((c+1)*c/2) % mod;
    ll ans = a * b % mod * c % mod;
    cout << ans << endl;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
  ll a,b,c;
  cin>>a>>b>>c;
  ll ans,m=998244353;
  ll x=(a*(a+1)/2);
  ll y=(b*(b+1)/2);
  ll z=(c*(c+1)/2);
  ll d=((x%m)*(y%m))%m;
  ll e=((d%m)*(z%m))%m;
  
    
  
  cout<<e;
  //951633476

    
  
}