#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

#define rep(i, l, r) for(int i=(l), i##_end_=(r); i<=i##_end_; ++i)
#define drep(i, l, r) for(int i=(l), i##_end_=(r); i>=i##_end_; --i)
#define fi first
#define se second
#define mp(a, b) make_pair(a, b)
#define Endl putchar('\n')
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
template<class T>inline T fab(T x){ return x<0? -x: x; }
template<class T>inline T readin(T x){
    x=0; int f=0; char c;
    while((c=getchar())<'0' || '9'<c) if(c=='-') f=1;
    for(x=(c^48); '0'<=(c=getchar()) && c<='9'; x=(x<<1)+(x<<3)+(c^48));
    return f? -x: x;
}

const int maxn=2e5*2;
const int mod=998244353;

inline int qkpow(int a, int n){
    int ret=1;
    for(; n>0; n>>=1, a=1ll*a*a%mod)
        if(n&1) ret=1ll*ret*a%mod;
    return ret;
}

int n, m;

inline void input(){
    n=readin(1), m=readin(1);
}

int fac[maxn+5], invf[maxn+5];

inline void init(){
    fac[0]=1;
    rep(i, 1, maxn) fac[i]=1ll*fac[i-1]*i%mod;
    invf[maxn]=qkpow(fac[maxn], mod-2);
    drep(i, maxn-1, 0) invf[i]=1ll*(i+1)*invf[i+1]%mod;
    invf[0]=1;
}

inline int C(int n, int m){
    if(m==0) return 1;
    if(n<m) return 0;
    return 1ll*fac[n]*invf[m]%mod*invf[n-m]%mod;
}

signed main(){
    input();
    init();
    int ans=0;
    rep(j, 1, m){
        int tmp=j, res=1;
        for(int i=2; i*i<=tmp; ++i) if(tmp%i==0){
            int cnt=0;
            while(tmp%i==0) tmp/=i, ++cnt;
            res=1ll*res*C(n+cnt-1, cnt)%mod;
        }
        if(tmp>1) res=1ll*res*n%mod;
        ans=(ans+res)%mod;
    }
    printf("%d\n", (ans)%mod);
    return 0;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=107;
long double E[N][N][N];
int32_t main()
{
	int a,b,c;
	cin>>a>>b>>c;
	// for(int i=0;i<=100;i++)
	// 	for(int j=0;j<=100;j++)
	// 	{
	// 		E[i][j][100]=E[100][i][j]=E[i][100][j]=0;
	// 	}

	for(int i=99;i>=0;i--)
	{
		for(int j=99;j>=0;j--)
		{
			for(int k=99;k>=0;k--)
			{
				if(i+j+k==0)
					continue;
				double ei=E[i+1][j][k]+1;
				ei*=i/(double)(i+j+k);
				double ej = E[i][j+1][k] + 1;
				ej *= j / (double)(i + j + k);
				double ek = E[i][j][k+1] + 1;
				ek *= k/ (double)(i + j + k);
				E[i][j][k]=ei+ej+ek;
				// if(i==a&&b==j&&c==k)
				// 	cout<<ei<<" "<<ej<<" "<<ek<<" "endl;;
			}
		}
	}
	cout <<fixed<< setprecision(6) << E[a][b][c] << endl;
}