your code don't work i used same one you post

on *:JOIN:#:{
if ($nick == $me) {
%topic $+ chan = $chan(#).topic
}
}

on *:TOPIC:#:{
if ($nick == $me) {
timer 1 3 /set %topic $+ chan $chan(#).topic | halt
}
else { topic # %topic $+ chan }
}

and it gave me this,

MyBotNick changes topic to "4¡!¹'¹!7¡!¹'¹!8¡!¹'¹!9¡!¹'¹!12¡!¹'¹!13¡!¹'¹! what goes around comes around 13!¹'¹!¡12!¹'¹!¡9!¹'¹!¡8!¹'¹!¡7!¹'¹!¡4!"
MeTheOwner changes topic to "welcome to my channel"
MyBotNick changes topic to "chan"

is the "%topic $+ chan" really necessary or you forgot to put the "$" before the "chan" ?