#include<cstdio>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
typedef long long LL;
int n,r[65];
LL dp[65][3][3][2];
const int mod = 1e9 + 7;
int cmp(int a,int b){return a<b?0:(a==b?1:2);}
LL solve(LL a){
    if(a==0) return 1;
    memset(dp,0,sizeof(dp));
    n=0;
    LL tmp=a;
    while(tmp) {r[++n]=tmp%2;tmp/=2;}
    LL ret=0;
    dp[0][1][1][0]=1;
    for(int i=1;i<=n;i++){
        for(int j=0;j<3;j++)
            for(int k=0;k<3;k++)
                for(int l=0;l<2;l++)
                for(int a=0;a<2;a++)
                for(int b=0;b<=a;b++){
                    int tj=cmp(a^b,r[i]);
                    int tk=cmp((a+b+l)%2,r[i]);
                    int tl=(a+b+l)/2;
                    tj=(tj==1?j:tj);
                    tk=(tk==1?k:tk);
                    dp[i][tj][tk][tl]=(dp[i][tj][tk][tl]+dp[i-1][j][k][l])%mod;
                }
    }
    for(int j=0;j<2;j++)
        for(int k=0;k<2;k++)
            ret=(ret+dp[n][j][k][0])%mod;
    return ret;
}
int main(){
    LL T;
  //  freopen("in.txt","r",stdin);
    while(~scanf("%lld",&T)){
        printf("%lld\n",solve(T));
    }
    return 0;

}
