#include"iostream" #include"algorithm" #include"cstring" #include"cstdio" #include"cmath" #include"vector" #include"map" #include"set" #include"queue" #include<cassert> usingnamespace std; constint MAXN = 3e6 + 20; //#define int long long #define rep(i, a, b) for (int i = (a), i##end = (b); i <= i##end; ++i) #define per(i, a, b) for (int i = (a), i##end = (b); i >= i##end; --i) #define pii pair<int,int> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back #define vi vector<int> #define all(x) (x).begin() , (x).end() #define mem( a ) memset( a , 0 , sizeof a ) typedeflonglong ll; constint P = 998244353; int n; int a , b , c; int f[1006][1006] , J[MAXN] , iJ[MAXN];
intPow( int x , int a ){ int ret = 1; while( a ) { if( a & 1 ) ret = ret * 1ll * x % P; x = x * 1ll * x % P , a >>= 1; } return ret; }
intC( int a , int b ){ return J[a] * 1ll * iJ[b] % P * iJ[a - b] % P; }
int pf2[MAXN]; intF( int n , int bias = 0 , int bus = 0 ){ int ans = 0; rep( i , 0 , n ) if( ( n - i ) % 3 == 0 ) { int us = ( n - i ) / 3; int g = J[i + bias] * 1ll * iJ[a - us - bus] % P * iJ[b - us - bus] % P * iJ[c - us - bus] % P; ans = ( ans + g * 1ll * C( us + i , i ) % P * pf2[us] ) % P; } return ans; }
voidsolve(){ cin >> a >> b >> c; n = a + b + c; J[0] = 1; rep( i , 1 , n ) J[i] = J[i - 1] * 1ll * i % P; iJ[n] = Pow( J[n] , P - 2 ); per( i , n , 1 ) iJ[i - 1] = iJ[i] * 1ll * i % P; pf2[0] = 1; rep( i , 1 , n ) pf2[i] = pf2[i - 1] * 1ll * ( P - 2 ) % P; cout << ( ( P - 3 ) * 1ll * F( n - 3 , 0 , 1 ) + F( n - 1 , 1 ) ) % P << endl; }