#include using namespace std; #define int long long #define rep(i,n) for(int i=0;i<(n);i++) #define reps(i,a,b) for(int i=(a);i<(b);i++) #define pb push_back #define eb emplace_back #define all(v) (v).begin(),(v).end() #define fi first #define se second using vint=vector; using pint=pair; using vpint=vector; templateinline void chmin(A &a,B b){if(a>b)a=b;} templateinline void chmax(A &a,B b){if(a ostream& operator<<(ostream& ost,const pair&p){ ost<<"{"< ostream& operator<<(ostream& ost,const vector&v){ ost<<"{"; for(int i=0;i struct ModInt{ uint32_t a; ModInt& s(uint32_t vv){ a=vv>=1; } return res; } ModInt inv()const{return pow(mod-2);} }; template istream& operator>>(istream& in,const ModInt& a){ return (in>>a.a); } template ostream& operator<<(ostream& out,const ModInt& a){ return (out<; template struct ModIntTable{ int N; vectorfacts,finvs,invs; ModIntTable():N(1<mtable; using Cd = complex; namespace std { template<> Cd& Cd::operator*=(const Cd& y) { double a = this->real(); double b = this->imag(); double c = y.real(); double d = y.imag(); return *this=Cd(a*c-b*d, a*d+b*c); } } template struct ArbitraryModConvolution15{ static constexpr double PI=acos(-1); static void dft(vector&f){ int n=f.size(); int s=__lg(n); static vector>w(30); w[0]=vector(1,C(1.0,0.0)); for(int i=1;i<=s;i++){ if(w[i].size())continue; w[i]=vector(1<>1]; } for(int i=0,j=1;j>1;k>(i^=k);k>>=1); if(i>j)swap(f[i],f[j]); } for(int m=1;m<=s;m++){ for(int i=0;i&f){ dft(f); reverse(f.begin()+1,f.end()); double in=1.0/f.size(); for(int i=0;iconvolute(vectorA,vectorB){ int n=1<<__lg(A.size()+B.size()-2)+1; vectorg(n),h(n); for(int i=0;i>15); for(int i=0;i>15); dft(g); dft(h); vectorgc=g; reverse(gc.begin()+1,gc.end()); C I(0,1); for(int i=0;iAB(A.size()+B.size()-1); for(int i=0;i>; mint po[2222222]; signed main(){ po[0]=1; for(int i=1;i<2222222;i++)po[i]=po[i-1]*2; int X,Y,Z; cin>>X>>Y>>Z; if(X==0&&Y==0&&Z==0){ cout<<0<F(X+Y+1); for(int i=0;i<=X+Y;i++){ if(i+ZU(X+Y+1); for(int i=0;i<=X+Y;i++)U[i]=mtable.finv(i); auto P=FFT::convolute(F,U); mint ans=0; for(int i=0;i<=X+Y;i++){ int k=i+Z; mint tmp=po[k]*mtable.fact(k)*P[i]; ans+=tmp; } ans/=2; if(X&1)ans*=-1; if(Y&1)ans*=-1; if(Z&1)ans*=-1; cout<