問題の言いかえ

1n1~n までの整数を、22で最大何回割り切れるかに応じて分けて考えます。
11以上nn以下で、22で最大kk回割り切れる整数の集合を、s(k,n)s(k,n)と定義します。

例として、 n=18n = 18 の場合で考えてみましょう。
s(0,18)={1,3,5,7,9,11,13,15,17}s(0,18) = \{1,3,5,7,9,11,13,15,17\}
s(1,18)={2,6,10,14,18}s(1,18) = \{2,6,10,14,18\}
s(2,18)={4,12}s(2,18) = \{4,12\}
s(3,18)={8}s(3,18) = \{8\}
s(4,18)={16}s(4,18) = \{16\}

まず、s(0,18)s(0,18)は、18未満の奇数の集合に等しいです。

s(1,18)s(1,18)の各要素について、ff を適用することを考えてみます。
f(2)=f(1)=1f(2) = f(1) = 1
f(6)=f(3)=3f(6) = f(3) = 3
f(10)=f(5)=5f(10) = f(5) = 5
f(14)=f(7)=7f(14) = f(7) = 7
f(18)=f(9)=9f(18) = f(9) = 9
これは、最大00回割り切れる集合の最初の55項と等しくなっています。

s(2,18)s(2,18)に関しても、ffを適用してみると…
f(4)=f(2)=f(1)=1f(4) = f(2) = f(1) = 1
f(12)=f(6)=f(3)=3f(12) = f(6) = f(3) = 3
これは、最大00回割り切れる集合の最初の22項と等しくなっています。

結局、22で割り切れる回数別で分けて考えた場合、s(k,n)s(k,n)ff適用後の総和は、奇数列 1,3,5,7,9...1,3,5,7,9... の最初の何項かの総和となっています。

1,3,5,7,9...1,3,5,7,9... の最初のxx項の総和をg(x)g(x)と定義すると、これは初項11・交差22・項数xxの等差数列の総和なので、g(x)=(1+(2x1))x2g(x) = \frac{(1+(2x-1))x}{2} です。
また、制約よりs(k,n)s(k,n)k40k \ge 40 の場合は空集合になります。
よって、この問題の答えは k=039g(s(k,n))\displaystyle\sum_{k=0}^{39} g( |s(k,n)| ) です。※(s(k,n)|s(k,n)|s(k,n)s(k,n)の要素数です)

s(k,n)|s(k,n)| の求め方

s(k,n)=n+2k2k+1|s(k,n)| = \frac{n+2^k}{2^{k+1}} です。
説明をするのが大変なので省略しますが、s(k,n)s(k,n) の要素を小さい順に並べたものが等差数列である事を利用しています。
32bit整数(C++のint型)では、計算途中にオーバーフローが生じてしまうので、64bit整数を使ってください。

g(x) を求める際の注意

xx が大きい場合、 g(x)g(x) の分母の1+(2x1))x1+(2x-1))x が64bit整数の取りうる最大値を超えてしまうことがあります。
つまり、以下のような実装ではWAになります。

(1+(2x1))x mod 109+7(1+(2x-1))x\ \mathrm{mod}\ 10^9+7 は、(1+(2x1))(1+(2x-1))xx をあらかじめmodを取っておくことで、オーバーフローさせずに計算することができますが、その場合計算後の値を2で割るとこれまたWAになります。
つまり、以下のような実装もまずいです。 何故、まずいのかはこの辺の サイト等を参照するといいです。

結論として、2で割る代わりに mod109+7\mathrm{mod} 10^9+7 における22の逆元である 2(109+7)2 mod 109+7(=500000004)2^{(10^9+7) - 2}\ \mathrm{mod}\ 10^9+7 (=500000004) を掛けてあげればよいです。

よって、正しく動く g(x)g(x) は以下のようになります。

想定解 (C++)

最後に、C++の想定解を載せておきます。

想定解(python)

pythonの場合、多倍長整数が利用可能なため、もっと単純にg(x)g(x)を求めることが可能になります。