Problem p02624 (C++) — buggy submission, verdict: Time Limit Exceeded

/****************************
 *  Developer : joshi08
 *  Date  :  27-06-2020
 *  Year  :  2020
 ****************************/

#include <bits/stdc++.h>

#define lli long long int
#define mod 1000000007
#define fi first
#define se second
#define ii pair<lli, lli>
#define mp make_pair
#define endl '\\n'
const double PI = 3.141592653589793238460;
lli gcd(lli a, lli b) {
  if (a == 0)
    return b;
  return gcd(b % a, a);
}
lli max(lli a, lli b) {
  if (a > b)
    return a;
  else
    return b;
}
lli min(lli a, lli b) {
  if (a < b)
    return a;
  else
    return b;
}
lli power(lli a, lli n) {
  lli res = 1;
  while (n) {
    if (n % 2 == 0) {
      a *= a;
      n /= 2;
    } else {
      res *= a;
      n--;
    }
  }
  return res;
}

using namespace std;
unsigned lli mk = 0;

int main() {
  ios::sync_with_stdio(false);

  unsigned lli n, i, m = 0;
  cin >> n;

  for (i = 1; i <= n; i++) {
    m += i * ((n / i) * ((n / i) + 1) / 2);
  }

  cout << m;
  return 0;
}


Error: TLE

Fixed submission:

/****************************
 *  Developer : joshi08
 *  Date  :  27-06-2020
 *  Year  :  2020
 ****************************/

#include <bits/stdc++.h>

#define lli long long int
#define mod 1000000007
#define fi first
#define se second
#define ii pair<lli, lli>
#define mp make_pair
#define endl '\\n'
const double PI = 3.141592653589793238460;
lli gcd(lli a, lli b) {
  if (a == 0)
    return b;
  return gcd(b % a, a);
}
lli max(lli a, lli b) {
  if (a > b)
    return a;
  else
    return b;
}
lli min(lli a, lli b) {
  if (a < b)
    return a;
  else
    return b;
}
lli power(lli a, lli n) {
  lli res = 1;
  while (n) {
    if (n % 2 == 0) {
      a *= a;
      n /= 2;
    } else {
      res *= a;
      n--;
    }
  }
  return res;
}

using namespace std;
unsigned lli mk = 0;

lli is_prime[10000001] = {1};
vector<lli> kprime;
// lli sFactor[10000001];
void sieve() {
  lli maxN = 10000001, i, j;
  for (i = 1; i < maxN; i++)
    is_prime[i] = 1;
  is_prime[0] = is_prime[1] = 0;
  for (i = 2; i * i <= maxN; i++) {
    if (is_prime[i]) {
      kprime.push_back(i);
      for (j = i * i; j <= maxN; j += i) {
        is_prime[j] = 0;
      }
    }
  }
}

// void primeFact(lli N)
//{
// mk = 1;
// for(lli i=2;i*i<=N;i++)
//{
// if(N%i==0)
//{
// lli cnt=0;
// while(N%i==0)
//{
// cnt++;
// N/=i;
//}
// cout<<i<<"^"<<cnt<<endl;
// mk *= (cnt+1);
//}
//}
// if(N>1)
//{
/// cout<<N<<"^"<<1<<endl;
// mk *= (1+1);
//}
//}

/*lli hey(lli n)
{
        lli ans = 1,check=0,i,count;

        for(i=0;i<kprime.size();i++)
        {
                lli p = kprime[i];
                if(p*p*p>n)
                        break;
                count=1;
                while(n%p==0)
                {
                        n = n/p;
                        count+=1;
                }
                ans *= count;
        }


        for(i=0;i<kprime.size();i++)
        {
                if(n==kprime[i]*kprime[i])
                        {
                                check=1;
                                break;
                        }

                if(n<kprime[i]*kprime[i])
                        break;

        }


        if(is_prime[n])
                ans *=2;
        else
        if(check==1)
                ans *=3;
        else
        if(n!=1)
                ans*=4;

        return ans;
}*/

void printDivisor(unsigned lli n) {
  unsigned lli i;
  mk = 0;

  for (i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      if (n / i == i) {
        // cout<<i<<" ";
        mk++;
      } else {
        // cout<<i<<" "<<n/i<<" ";
        mk += 2;
      }
    }
  }
}

int main() {
  ios::sync_with_stdio(false);
  sieve();

  unsigned lli n, i;
  unsigned lli k = 0;
  cin >> n;

  for (i = 1; i <= n; i++) {
    printDivisor(i);
    // cout<<endl;
    // mk = hey(n);
    // cout<<i<<" "<<mk<<endl;
    k += (i * mk);
  }

  cout << k;
  return 0;
}