Sum of divisors, a congruence Let $\sigma_r(n)=\sum_{d|n}d^r$ where the sum is over all the integers $d=1,\dots,n$ which divide $n$. I am conjecturing

$$\sum_{m=1}^{p-1}m^2 \sigma_3(m)\sigma_3(p-m)\not\equiv 0\pmod{p^2}$$
  for any prime $p>3$.

I have checked the truth of this statement up to $p\sim 30'000$ with some C++ program I wrote, but going above that would require to use some arbitrary precision library (which I tried, but failed).

Can anyone test the conjecture for some higher bound? Also, any ideas on how to attack the problem/any semi-obvious reason why this shouldn't be true?

Without going too much into details, this formula comes from fiddling with the Fourier coefficients of the Eisenstein series for $SL_2(\mathbb{Z})$. I have no reason to assume the conjecture is true (or false) but I have absolutely no idea on how to start working on it, mostly because it mixes "additive" (sum) and "multiplicative" ($\sigma$) number theory, so I am not actually expecting it to be easy.
 A: file should be named Angelo.cc
get some local help installing  https://gmplib.org/
As currently set, does primes up to 3000, first checks whether the total is 0 mod p, if yes then it does it over but prints out each line   

#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <strstream>
#include <list>
#include <set>
#include <math.h>
#include <iomanip>
#include <string>
#include <algorithm>
#include <iterator>
#include <gmp.h>
#include <gmpxx.h>


using namespace std;

//   g++  -o Angelo Angelo.cc  -lgmp -lgmpxx

//   ./Angelo


// ./Angelo > Angelo.txt

int mp_PrimeQ( mpz_class  i)
{
  if ( i <= 0 ) return 0;
  else if ( i == 1 ) return 1;
  else return  mpz_probab_prime_p( i.get_mpz_t() , 50 );
} // mp_PrimeQ

set<mpz_class> mp_Divisors( mpz_class  i)
{
  set<mpz_class> sofar, more;
    set<mpz_class>::iterator iter;
  sofar.insert(1);
  more.clear();

  mpz_class p = 2;
   mpz_class  temp = i;
  if (temp < 0 )
  {
    temp *= -1;

  }


  if ( temp > 1)
  {
    int primefac = 0;
    while( temp > 1 && p * p <= temp)  // WWWWWWWWWWWWWWWWWWW
    {
      if (temp % p == 0)
      {
        ++primefac;

        temp /= p;
        int exponent = 1;
          mpz_class power = p;
          for(iter = sofar.begin() ;  iter != sofar.end(); ++iter)
          {
             more.insert( power * *iter );
          }
        while (temp % p == 0)
        {
          temp /= p;
          ++exponent;
          power *= p;
           for(iter = sofar.begin() ;  iter != sofar.end(); ++iter)
          {
             more.insert( power * *iter );
          }
        } // while p is fac

         for(iter = more.begin() ;  iter != more.end(); ++iter)
          {
             sofar.insert(  *iter );
          }
          more.clear();
      }  // if p is factor
      ++p;
    } // while p

    if ( temp > 1) {
        for(iter = sofar.begin() ;  iter != sofar.end(); ++iter)
          {
             more.insert( temp * *iter );
          }
        for(iter = more.begin() ;  iter != more.end(); ++iter)
          {
             sofar.insert(  *iter );
          }
          more.clear();
    }
  } // temp > 1
  return sofar;
} // mp_Divisors

mpz_class mp_Sigma_K(mpz_class i, int k)
{
     set<mpz_class> div = mp_Divisors(   i);
  mpz_class sig = 0;
  mpz_class d;
   set<mpz_class>::iterator iter;
    for(iter = div.begin() ;    iter != div.end() ; ++iter)
    {
      mpz_class f = 1;
      d = *iter;
      for(int j = 1; j <= k; ++j) f *= d;
       sig += f;
    }
  return sig;
}// mp_Sigma_K


int main()
{
  for(mpz_class p = 3; p < 3000; p += 2){
  if( mp_PrimeQ(p) ){
  // cout << endl << endl << p << endl;
    mpz_class total = 0;
    for(mpz_class m = 1; m < p; ++m){
      mpz_class piece = m * m *  mp_Sigma_K(m, 3)  *  mp_Sigma_K( p - m, 3)  ;
      total += piece;
    //  cout << " p " << p << "  m  "  << m << "  piece  % p " << piece % p   << "  total % p  " << total % p << endl;
     } //  for m

    if( total % p == 0) 
    {
       cout << endl << endl << p << endl;
   total = 0;
    for(mpz_class m = 1; m < p; ++m){
      mpz_class piece = m * m *  mp_Sigma_K(m, 3)  *  mp_Sigma_K( p - m, 3)  ;
      total += piece;
      cout << " p " << p << "  m  "  << m << "  piece " << piece << " % p " << piece % p   << "  total % p  " << total % p << endl;
     } //  for m
    }



    } // if prime
  } // fopr p
  system("date");
  return 0;
}

//        


//   g++  -o Angelo Angelo.cc  -lgmp -lgmpxx

