#include using namespace std; typedef signed long long ll; #undef _P #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define ITR(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) //------------------------------------------------------- ll N; ll mo=1000000007; map M[2],R[2]; ll hoge2(ll a,int lead) { if(a==0) return 0; if(R[lead].count(a)) return R[lead][a]; ll ret=0; if(lead==1) { if(N&a) { // 11 ret+=((N&(a-1))+1)%mo*(a%mo)%mo; // 10 ret+=hoge2(a>>1,1); // 00,01 ret+=2*hoge2(a>>1,0); } else { // 00,01 ret+=2*hoge2(a>>1,1); } } else { // 11 ret+=a%mo*(a%mo)%mo; // 10,01,00 ret+=3*hoge2(a>>1,0); } //cout<<"R"<>1,1); // 00 ret+=hoge1(a>>1,0); } else { // 00 ret+=hoge1(a>>1,1); } } else { // 00 ret+=hoge1(a>>1,0); // 10 ret+=hoge2(a>>1,0); } //cout<<"M"<>N; cout<