Haskell, 26047 (= 224+25823)
-------

 r 0="VVX"
 r n=s(zip[1000,500,100,50,10,5]"MDCLXV")n ξ
 ξ='ξ'
 s[]q f
 |q<0=s[](-q)f++r 0
 |9*q<1=""
 |r<-q-1='I':s[]r f
 s ω@((v,a):l)q f
 |q>=v,f/=a=a:s ω(q-v)ξ
 |f==ξ,γ<-s ω(v-q)a++[a],η γ<η(s l q ξ)=γ
 |True=s l q ξ
 η=length

to be used as e.g.

 GHCi> r 7
 "VII"
 GHCi> r 39
 "XIL"
 GHCi> r (-39)
 "LLXILC"
 GHCi> r 1983
 "MXVIIM"
 GHCi> r 259876
 "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCXXIVM"

You can evaluate the length sum with the straightforward

 GHCi> sum . map(length.r) $ [-1000..3000]
 25823

Which takes but a few seconds.